package com.atcumt.Thread.singleton;

/**
 * 懒汉式：在真正需要使用对象时才去创建该单例类对象
 * 类加载后如果我们一直没有调用getInstance方法，那么就不会实例化对象。实现了延迟加载
 * 在方法上添加了synchronized关键字，每次调用getInstance方法都会同步，对性能影响较大
 */
public class Singleton {

    // 声明此类型的变量，但没有实例化
    private static Singleton singleton;

    // 私有化所有的构造方法,防止直接通过new关键字实例化
    private Singleton() {}

    // 对外提供一个获取实例的静态方法，为了数据安全添加synchronized关键字
    public static synchronized Singleton getInstance() {
        if (singleton == null) {

            singleton = new Singleton(); // 当instance不为空的时候才实例化
        }
        return singleton;
    }
}
